﻿
namespace Bettzueche.RLLibrary.RLTypes
{
    /// <summary>
    /// An RL Action, State, Observation or the like.<para>
    /// Generally, a RL-Type consists of one or more values of int, double or char.</para>
    /// </summary>
    /// <remarks>
    /// Generally, a RL-Type consists of one or more values of int, double or char. Therefore
    /// you can use this Interface as a generic definition of an RL-Action or RL-State, e.g. by
    /// define a struct implementing IGeneralType.
    /// </remarks>
    public interface IGeneralType {

        /// <summary>
        /// Gets the total count of values.
        /// </summary>
        int Count { get; }

        /// <summary>
        /// Gets the count of discrete values.
        /// </summary>
        int IntCount { get; }

        /// <summary>
        /// Gets the count of continius values.
        /// </summary>
        int DoubleCount { get; }

        /// <summary>
        /// Gets the count of character values.
        /// </summary>
        int CharCount { get; }

        /// <summary>
        /// Gets or sets the discrete values.
        /// </summary>
        /// <value>
        /// The int values.
        /// </value>
        int[] IntValues { get; set; }

        /// <summary>
        /// Gets or sets the continius values.
        /// </summary>
        /// <value>
        /// The double values.
        /// </value>
        double[] DoubleValues { get; set; }

        /// <summary>
        /// Gets or sets the character values.
        /// </summary>
        /// <value>
        /// The char values.
        /// </value>
        char[] CharValues { get; set; }
    }
}
